package com.ys.io.p1转换流;

import java.io.*;

/**
 * 描述:
 *  工作中转换流很少独立使用，通常定义一个带有缓冲区的读者和写者来装饰转换流,
 * 为什么使用带有缓冲区的读者和写者来装饰转换流呢？因为转换流没有缓冲区
 * ，每次调用read相关的方法都字节和磁盘交互。
 * @author CodeYang
 * @version 2021/1/2 20:53
 */
public class 待有缓冲区的转换流使用 {

    /**
     *  缓冲流的核心作用: 就是减少程序与磁盘的交互次数,增加与内存的交互次数
     *  因为内存的读写速度远比磁盘要高
     * @param args
     */
    public static void main(String[] args) {
        try {
            method01("day_24/GBK.txt","GBK","day_24/GBK-UTF-8.txt","UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 解决文本文件格式转换的问题, 使用待遇缓冲区的转换流完成
     * @param srcPath 源路径
     * @param charset1 原编码格式
     * @param destPath 目的路径
     * @param charset2 目的编码方式
     * @throws Exception
     */
    private static void method01(String srcPath,String charset1,String destPath,String charset2 ) throws Exception {

        try (
                // 使用缓冲流 来操作读与写更快
                // 这里操作的是文本文件使用字符缓冲流        (----- 转换流 (  文件流-字节流        ----).编码)
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(srcPath),charset1));
               BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destPath),charset2));

        ) {
            // 字符流可以使用 char[] 也可以字节使用 String 来做接收
            String line = null;
            while ((line = br.readLine()) != null) {
                bw.write(line);
                // 换行
                bw.newLine();
            }
        }

    }
}
